/******************************************************
Cours:   LOG121
Session: A2013
Groupe:  
Projet: Laboratoire #3
etudiant(e)s: Simon Castro
			  Fredy Alexander 
			  Renaud Vincent
              
              
Professeur : 
Nom du fichier: BuncoPlus.java
Date cree: 2013-10-20
Date dern. modif. 2013-10-23
*******************************************************
Historique des modifications
*******************************************************
2013-10-20 Version 1.0
*******************************************************/ 

package bunco;
import cadricielJeuDe.CalculateurScore;
import cadricielJeuDe.Jeu;
import cadricielJeuDe.Partie;

/**
 * La classe Bunco+ represente le deroulement du jeu utilisat un object partie
 * contenant toute les information precedement pre-etablies et une strategie, 
 * dont celle-ci est CalculScoreBunco. Cette classe etend la classe Jeu.
 * 
 * @author Fredy
 */
public class BuncoPlus extends Jeu{
	
	/**
	 * Constructeur de la classe Bunco plus, accedant a l'information d'une
	 * partie et la strategie de bunco.
	 * 
	 * @param partie
	 * @param strategie
	 */
	public BuncoPlus(Partie partie, CalculateurScore strategie) {
		super(partie, strategie);
	}
	
	/************
	 * Acesseurs
	 ************/
	
	public int getNbTours(){
		return super.getPartie().getNbrTours();
	}
	
	/************
	 * Mutateurs
	 ************/
	
	public void setNbTours(int nbTours){
		super.setNbTours(nbTours);
	}
	
	/**
	 * jouerPartie() represente le deroulement  d'une partie de Bunco+ qui dure 
	 * le nombre de tour pre-etablie. Un tour se termine lorsque tous les joueurs 
	 * ont finie de lancer leur dees et obtenue leur points(ou non) selon les regles
	 * de bunco. 
	 */
	public void jouerPartie(){
		
		int i = 0;
		int j = 0;
		boolean jouer = true;
		ResultatValide rv = new ResultatValide();
		
		//la partie s'arrete lorsque le nombre de tour se termine.
		while(i<super.getPartie().getNbrTours()){

			//un tour se termine lorsque tous les joueurs on jouee
			while(j<super.getPartie().getNbrJoueurs()) {
				
				//tant qu'on passe pas la main au prochain joueur
				while(jouer){
					System.out.println("Le tour de: "+super.getPartie().getCJoueur().getJoueurAt(j).getNom());
					//Brassage des des pour le premier tours
					rv = (ResultatValide) super.calculerScoreTour(i+1,super.getPartie().
							getCDes().brasserLesDes());
					
					System.out.println("Points obtenu "+rv.getPoints());
					super.getPartie().getCJoueur().getJoueurAt(j).cumuleScore(rv.getPoints());

					//Si l'on obtient un bunco ou aucun points
					if(rv.isPasserMain()){
						jouer = false;
					}
					
				}// fin de la main dun joueur

				//au tour du prochain joueur
				j++;
				
				//on recommence pour le prochain joueur
				jouer = true;
			}// fin d'un tour
			
			j = 0;
			i++;
			
		}// fin de la partie
		
		//Declaration du vainqueur et remplacement de la nouvelle collection de
		//joueurs
		super.getPartie().setCJoueur(super.calculerLeVainqueur(
				super.getPartie().getCJoueur()));
		
		System.out.println("Les vaincueurs sont: ");
		
		for (int k=0; k<super.getPartie().getNbrJoueurs(); k++){
			
			System.out.println(super.getPartie().getCJoueur().getJoueurAt(k).getNom()+
					" "+super.getPartie().getCJoueur().getJoueurAt(k).getScore() +
					" points");
		}
	}
}
